using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._LocationReferencingTools._Configuration._LRSIntersection
{
    /// <summary>
    /// <para>Modify LRS Intersection</para>
    /// <para>Modifies the properties of an intersection feature class, such as fields and intersecting layers, that compose the intersection feature class and can be added or removed.</para>
    /// <para>修改构成相交要素类并可添加或移除的相交要素类的属性，例如字段和相交图层。</para>
    /// </summary>    
    [DisplayName("Modify LRS Intersection")]
    public class ModifyLRSIntersection : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public ModifyLRSIntersection()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_feature_class">
        /// <para>Intersection Feature Class</para>
        /// <para>The input LRS intersection feature layer. This feature class cannot be a service.</para>
        /// <para>输入 LRS 相交要素图层。此要素类不能是服务。</para>
        /// </param>
        public ModifyLRSIntersection(object _in_feature_class)
        {
            this._in_feature_class = _in_feature_class;
        }
        public override string ToolboxName => "Location Referencing Tools";

        public override string ToolName => "Modify LRS Intersection";

        public override string CallName => "locref.ModifyLRSIntersection";

        public override List<string> AcceptEnvironments => [];

        public override object[] ParameterInfo => [_in_feature_class, _intersection_id_field, _intersection_name_field, _route_id_field, _feature_id_field, _feature_class_name_field, _from_date_field, _to_date_field, _intersecting_layers, _measure_field, _out_feature_class];

        /// <summary>
        /// <para>Intersection Feature Class</para>
        /// <para>The input LRS intersection feature layer. This feature class cannot be a service.</para>
        /// <para>输入 LRS 相交要素图层。此要素类不能是服务。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Intersection Feature Class")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_feature_class { get; set; }


        /// <summary>
        /// <para>Intersection ID Field</para>
        /// <para>The field in the Intersection Feature Class to use as the intersection unique ID field.</para>
        /// <para>“相交要素类”中要用作相交唯一 ID 字段的字段。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Intersection ID Field")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _intersection_id_field { get; set; } = null;


        /// <summary>
        /// <para>Intersection Name Field</para>
        /// <para>The concatenated field in the Intersection Feature Class that contains the descriptors for the route and the intersecting feature.</para>
        /// <para>“相交要素类”中的串联字段，其中包含路径和相交要素的描述符。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Intersection Name Field")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _intersection_name_field { get; set; } = null;


        /// <summary>
        /// <para>Route ID Field</para>
        /// <para>The field in the Intersection Feature Class that contains the unique route ID.</para>
        /// <para>“交点要素类”中包含唯一路径 ID 的字段。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Route ID Field")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _route_id_field { get; set; } = null;


        /// <summary>
        /// <para>Feature ID Field</para>
        /// <para>The field in the Intersection Feature Class that contains the ID of the intersecting feature.</para>
        /// <para>“相交要素类”中包含相交要素 ID 的字段。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Feature ID Field")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _feature_id_field { get; set; } = null;


        /// <summary>
        /// <para>Feature Class Name Field</para>
        /// <para>The field in the Intersection Feature Class that contains the name of the feature class that participated in the intersection.</para>
        /// <para>“相交要素类”中的字段，其中包含参与相交的要素类的名称。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Feature Class Name Field")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _feature_class_name_field { get; set; } = null;


        /// <summary>
        /// <para>From Date Field</para>
        /// <para>The field in the Intersection Feature Class that contains the from date of the route.</para>
        /// <para>“交点要素类”中包含路径起始日期的字段。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("From Date Field")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _from_date_field { get; set; } = null;


        /// <summary>
        /// <para>To Date Field</para>
        /// <para>The field in the Intersection Feature Class that contains the to date of the route.</para>
        /// <para>“相交要素类”中包含路径的截至日期的字段。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("To Date Field")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _to_date_field { get; set; } = null;


        /// <summary>
        /// <para>Intersecting Layers</para>
        /// <para><xdoc>
        ///   <para>The Intersection Feature Class fields that compose the intersecting layer.</para>
        ///   <bulletList>
        ///     <bullet_item>Intersection Layer—The feature class that intersects the LRS Network.</bullet_item><para/>
        ///     <bullet_item>ID Field—The field in the intersecting layer used to uniquely identify the feature that intersects the network.</bullet_item><para/>
        ///     <bullet_item>Description Field—The field that provides the description, such as town or county name, of the intersecting feature.</bullet_item><para/>
        ///     <bullet_item>Name Separator—The name separator for the intersection, such as AND, INTERSECT, +, or |.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>构成相交图层的交点要素类字段。</para>
        ///   <bulletList>
        ///     <bullet_item>交点图层 - 与 LRS 网络相交的要素类。</bullet_item><para/>
        ///     <bullet_item>ID 字段 - 相交图层中的字段，用于唯一标识与网络相交的要素。</bullet_item><para/>
        ///     <bullet_item>描述字段 - 提供相交要素的描述（例如城镇或县名称）的字段。</bullet_item><para/>
        ///     <bullet_item>名称分隔符 - 相交的名称分隔符，例如 AND、INTERSECT、+ 或 |。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Intersecting Layers")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _intersecting_layers { get; set; } = null;


        /// <summary>
        /// <para>Measure Field</para>
        /// <para>The field in the Intersection Feature Class that contains the measure on the base route at the point of intersection.</para>
        /// <para>“相交要素类”中包含相交点处基本路径上的测量值的字段。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Measure Field")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _measure_field { get; set; } = null;


        /// <summary>
        /// <para>Output Details File</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Details File")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _out_feature_class { get; set; }


        public ModifyLRSIntersection SetEnv()
        {
            base.SetEnv();
            return this;
        }

    }

}